package cn.snmp.mutual.nms.mibs;

import java.io.*;
import java.util.*;

import cn.snmp.mutual.nms.SnmpOID;
import cn.snmp.mutual.uk.stack.AsnObject;

public class MibOperations implements Serializable, MIBConstants
{
    private Hashtable m_propreties;
    private Vector m_modules;
    
    public MibOperations() {
        this.m_propreties = null;
        this.m_modules = null;
        this.m_propreties = new Hashtable();
        this.m_modules = new Vector();
    }
    
    public MibOperations(final Hashtable propreties, final Vector modules) {
        this.m_propreties = null;
        this.m_modules = null;
        this.m_propreties = propreties;
        this.m_modules = modules;
    }
    
    public Vector getMibModules() {
        return this.m_modules;
    }
    
    public MibNode getMibNode(final String name) {
        if (name == null) {
            return null;
        }
        for (int i = 0; i < this.m_modules.size(); ++i) {
            final MibModule module = (MibModule)this.m_modules.get(i);
            final MibNode node = module.getMibNode(name);
            if (node != null) {
                return node;
            }
        }
        return null;
    }
    
    public MibNode getMibNode(final SnmpOID oid) {
        if (oid == null) {
            return null;
        }
        for (int i = 0; i < this.m_modules.size(); ++i) {
            final MibModule module = (MibModule)this.m_modules.get(i);
            final MibNode node = module.getMibNode(oid);
            if (node != null) {
                return node;
            }
        }
        return null;
    }
    
    public String getModuleNameDefinition(final String s) {
        return "";
    }
    
    public void unloadAllMibModules() {
        if (this.m_propreties != null) {
            this.m_propreties.clear();
        }
        if (this.m_modules != null) {
            for (int i = 0; i < this.m_modules.size(); ++i) {
                final MibModule module = (MibModule)this.m_modules.get(i);
                if (module != null) {
                    module.clear();
                }
            }
            this.m_modules.clear();
        }
        this.m_propreties = null;
        this.m_modules = null;
    }
    
    public boolean unloadMibModule(final MibModule mibmodule) {
        if (mibmodule == null) {
            return false;
        }
        for (int i = 0; i < this.m_modules.size(); ++i) {
            final MibModule module = (MibModule)this.m_modules.get(i);
            if (module.toString().equals(mibmodule)) {
                this.m_modules.remove(module);
                return true;
            }
        }
        return false;
    }
    
    public MibModule unloadMibModule(final String mibmodule) {
        if (mibmodule == null) {
            return null;
        }
        for (int i = 0; i < this.m_modules.size(); ++i) {
            final MibModule module = (MibModule)this.m_modules.get(i);
            if (module.toString().equals(mibmodule)) {
                this.m_modules.remove(module);
                return module;
            }
        }
        return null;
    }
    
    public MibModule getMibModule(final String mibmodule) {
        if (mibmodule == null) {
            return null;
        }
        for (int i = 0; i < this.m_modules.size(); ++i) {
            final MibModule module = (MibModule)this.m_modules.get(i);
            if (module.toString().equals(mibmodule)) {
                return module;
            }
        }
        return null;
    }
    
    public void loadMibModules(final String mibsProfile) {
        final MibProfileLoader loader = new MibProfileLoader(mibsProfile);
        final MibOperations temp = loader.load();
        this.m_propreties = temp.m_propreties;
        this.m_modules = temp.m_modules;
    }
    
    public static void main(final String[] argv) {
        AsnObject.debug = 20;
        final MibOperations opterations = new MibOperations();
        opterations.loadMibModules("demo/1.2.0.rmp");
    }
}
